package es.ikex.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import es.ikex.modelo.Cliente;
import es.ikex.modelo.Pedidos;
import es.ikex.modelo.Producto;
import es.ikex.pojo.Redondear;


public class PedidosDao extends ConexionDAO{
	public int crearPedido(String estado,int  codigoCliente, float baseImponible,float  gastosDeEnvio,int  iva,String  direccion,String codigoPostal) {
		int key = 0;
		try {
			getConexion();


			
			preparada = conexion.prepareStatement("insert into pedidos " +
					"( Estado, CodigoCliente, BaseImponible, GastosDeEnvio, IVA, Direccion, CodigoPostal) values " +
					"(?,?,?,?,?,?,?)");

			preparada.setString(1, estado);
			preparada.setInt(2, codigoCliente);
			preparada.setFloat(3, baseImponible);
			preparada.setFloat(4, gastosDeEnvio);
			preparada.setInt(5, iva);
			preparada.setString(6, direccion);
			preparada.setString(7, codigoPostal);
			
			preparada.executeUpdate();
			
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery("select max(NumeroPedido) as ultimo from pedidos where CodigoCliente='"+codigoCliente+"'");
			
			while(resultado.next()){
				key = resultado.getInt("ultimo");
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return key;
	}
	
	public Collection<Pedidos> getPedidos(String where){
		Collection<Pedidos> pedido = new ArrayList<Pedidos>();
		try{
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery("select NumeroPedido, Descripcion, Fecha, BaseImponible, IVA, GastosDeEnvio, Direccion, CodigoPostal" +
					" from estadospedidos inner join pedidos on estadospedidos.codigo=pedidos.estado "+where+" ORDER BY  Fecha");
			while(resultado.next()){
				Pedidos p = new Pedidos();
				p.setCodigoPostal(resultado.getString("CodigoPostal"));
				p.setDescripcion(resultado.getString("Descripcion"));
				p.setDireccion(resultado.getString("Direccion"));
				p.setNumeroPedido(resultado.getString("NumeroPedido"));
				String fechaFormateada = resultado.getString("Fecha");
				String[] fecha = fechaFormateada.split(" ");
				fecha = fecha[0].split("-");
				fechaFormateada = fecha[2] + "/" + fecha[1] + "/" + fecha[0];
				fecha = resultado.getString("Fecha").split(" ");
				fechaFormateada = fechaFormateada + " - " + fecha[1].substring(0, fecha[1].length() -5 );
				p.setFecha(fechaFormateada);
				float precio = ((100 + Float.parseFloat(resultado.getString("IVA")))/100)*Float.parseFloat(resultado.getString("BaseImponible"))+ Float.parseFloat(resultado.getString("GastosDeEnvio"));
				precio = Redondear.redondear(precio);
				p.setPrecio(precio);
				
				pedido.add(p);
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return pedido;
	}
	
	public void eliminarPedido(String codigo){
		try {
			getConexion();
			preparada = conexion.prepareStatement("DELETE FROM pedidos WHERE NumeroPedido = '"+codigo+"'");
			preparada.executeUpdate();
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
	}
	
	public Collection<Pedidos> cambiarEstado(String estado, String where){
		Collection<Pedidos> pedido = new ArrayList<Pedidos>();
		try{
			getConexion();
			preparada = conexion.prepareStatement("update pedidos set Estado=? where NumeroPedido=?");
			preparada.setString(1, estado);
			preparada.setString(2, where);
			preparada.executeUpdate();
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return pedido;
	}
	
	public float getGastosDeEnvio(String where){
		float gastos = 0f;
		try{
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery("select GastosDeEnvio from pedidos where NumeroPedido='"+where+"'");
			while(resultado.next()){
				gastos = resultado.getFloat("GastosDeEnvio");
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return gastos;
	}
	
	public float getIva(String where){
		float iva = 0f;
		try{
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery("select IVA from pedidos where NumeroPedido='"+where+"'");
			while(resultado.next()){
				iva = resultado.getFloat("IVA");
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return iva;
	}
	
}
